﻿using System;

namespace BridgeShips
{
    public class EntityStatus
    {

        public const int ATTRIBUTE_INTERVAL = 10;

        #region 实体属性

        private Attribute<EntityAttributeType> m_Attribute;

        #endregion

        #region 接口

        public EntityStatus(EntityData data)
        {
            m_Attribute = new Attribute<EntityAttributeType>();
            if (data == null || data.Attributes == null) return;
            //初始化数据
            foreach (var attribute in data.Attributes)
            {
                SetAttribute(attribute.Key, attribute.Value);
            }
        }
        public void Release()
        {
            m_Attribute.Release();
            m_Attribute = null;
        }

        #endregion

        #region 属性

        public void AddChangeListener(EntityAttributeType key, Action<int, int> callback)
        {
            if (m_Attribute == null) return;
            m_Attribute.AddChangeListener(key, callback);
        }
        public void RemoveChangeListener(EntityAttributeType key, Action<int, int> callback)
        {
            if (m_Attribute == null) return;
            m_Attribute.RemoveChangeListener(key, callback);
        }
        public void ChangeAttribute(EntityAttributeType attribute, int changeValue)
        {
            m_Attribute.ChangeValue(attribute, changeValue);
        }
        public void ChangeAttribute(EntityAttributeType attribute, float changeValue)
        {
            m_Attribute.ChangeValue(attribute, changeValue);
        }
        public float GetAttributeFloat(EntityAttributeType attribute)
        {
            return m_Attribute.GetFloat(attribute);
        }
        public int GetAttributeInt(EntityAttributeType attribute)
        {
            return m_Attribute.GetInt(attribute);
        }
        public void SetAttribute(EntityAttributeType attribute, int value)
        {
            m_Attribute.Set(attribute, value);
        }
        public void SetAttribute(EntityAttributeType attribute, float value)
        {
            m_Attribute.Set(attribute, value);
        }

        #endregion
        
    }
}
